package com.cskaoyan.javase.oop.exercise5;

/**
 * @description: 小练习
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * > 面向对象基本使用的练习
 * - 用面向对象的思想模拟LOL当中盖伦的战斗
 * - 用面向对象的思想模拟植物（Plant）大战僵尸（Zombie）
 *
 * 分析的过程：
 * 抽取出盖伦这一类事物的共同的特性
 * 抽取对象的共同特征形成模板，得到类
 *
 * 盖伦是什么？英雄
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建英雄对象
        //我想创建对象的时候立刻完成赋值
        Hero hero = new Hero("盖伦", "致残打击", "蓄意洪拳", "爱的魔力转圈圈", "大宝剑！");
        //hero.fight("人在塔在，德玛西亚！");
        hero.printHero();

        //创建一个英雄
        Hero hero2 = new Hero("蛮王", "Q", "W", "E", "R！");

        String xxx = "123123123123123131";
        //方法的参数列表中起关键作用的是数据类型
        new Hero(xxx);


    }

}

//英雄
class Hero {
    //共同的属性
    String name;
    String skillQ;
    String skillW;
    String skillE;
    String skillR;

    //行为
    public void fight(String message) {
        //英雄都会战斗
        System.out.println(message);
    }

    public Hero() {
    }

    //写有参构造方法
    //写构造方法我也觉得tmd烦死了
    //所以伟大的idea 给我们提供了快捷键
    //alt+insert
    public Hero(String name, String skillQ, String skillW, String skillE, String skillR) {
        //this.name = name;
        //使用this()调用别的构造方法
        //String
        this(name);
        this.skillQ = skillQ;
        this.skillW = skillW;
        this.skillE = skillE;
        this.skillR = skillR;
    }

    //有一个name的构造方法
    public Hero(String name) {
        this.name = name;
    }

    //搞一个skillQ的构造方法
    /*public Hero(String skillQ) {
        this.name = name;
    }*/

    //加一个方法，输出这个英雄的所有属性
    public void printHero() {
        //打印当前Hero对象的成员变量
        //我不太知道 name skillR也好 fight 到底什么
        //建议大家为了增强代码的可读性，如果你明确知道你用的是成员变量或者成员方法，最好加一个this
        System.out.print("名字为：" + this.name + "的英雄，使用" + this.skillR + "在");
        this.fight("人在塔在！");
    }
}